import axios from 'axios'
import { ElMessage } from 'element-plus'

const service = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 5000,
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json'
    }
})

// 获取schoolNumber
const getSchoolNumber = () => {
    try {
        // 优先从userInfo中获取
        const userInfo = sessionStorage.getItem('userInfo')
        if (userInfo) {
            const userObj = JSON.parse(userInfo)
            if (userObj.schoolNumber) {
                return userObj.schoolNumber
            }
        }
        return null
    } catch (error) {
        console.error('获取schoolNumber失败:', error)
        return null
    }
}

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 从 sessionStorage 中获取 token
        const token = sessionStorage.getItem('token')
        const schoolNumber = getSchoolNumber()
        
        console.log('当前请求URL:', config.url)
        console.log('当前token:', token)
        console.log('当前schoolNumber:', schoolNumber)
        console.log('当前sessionStorage:', sessionStorage)
        
        if (token) {
            // 确保 token 格式正确（如果后端期望的格式是 "NERV_" 开头）
            const tokenValue = token.startsWith('NERV_') ? token : `NERV_${token}`
            config.headers['Authorization'] = tokenValue
            console.log('设置到请求头的token:', tokenValue)
        } else {
            console.log('未找到token，当前sessionStorage内容:', sessionStorage)
            // 尝试从 localStorage 获取 token
            const localToken = localStorage.getItem('token')
            if (localToken) {
                console.log('从 localStorage 找到 token:', localToken)
                const tokenValue = localToken.startsWith('NERV_') ? localToken : `NERV_${localToken}`
                config.headers['Authorization'] = tokenValue
                console.log('使用 localStorage 中的 token:', tokenValue)
            }
        }

        // 确保schoolNumber参数存在
        if (config.method === 'get' && config.url === '/getExamList') {
            if (!config.params) {
                config.params = {}
            }
            if (schoolNumber) {
                config.params.schoolNumber = schoolNumber
            }
        }
        
        console.log('请求配置:', config)
        return config
    },
    error => {
        console.error('请求错误:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 直接返回响应数据
        return response.data
    },
    error => {
        console.error('响应错误:', error) // 添加调试日志
        if (error.response) {
            if (error.response.status === 401) {
                ElMessage.error('登录已过期，请重新登录')
                // token 失效，清除用户信息并跳转到登录页
                sessionStorage.removeItem('token')
                sessionStorage.removeItem('userInfo')
                window.location.href = '/login'
            } else {
                ElMessage.error(error.response.data?.message || '请求失败')
            }
        } else if (error.request) {
            ElMessage.error('网络连接失败，请检查网络')
        } else {
            ElMessage.error('请求配置错误')
        }
        return Promise.reject(error)
    }
)

export default service